/**
 * 7. 整数反转
 * 给你一个 32 位的有符号整数 x ，返回 x 中每位上的数字反转后的结果。
 *
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 *
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 *
 *
 * 示例 1：
 *
 * 输入：x = 123
 * 输出：321
 * 示例 2：
 *
 * 输入：x = -123
 * 输出：-321
 * 示例 3：
 *
 * 输入：x = 120
 * 输出：21
 * 示例 4：
 *
 * 输入：x = 0
 * 输出：0
 *
 *
 * 提示：
 *
 * -231 <= x <= 231 - 1
 */
class Solution {
    public int reverse(int num) {
        int reNum = 0;

        //2^31 = 2147483648
        for (;num != 0;num/=10){
            int rema = num % 10;

            //正数，需要提前一位判断大小，否则溢出
            if(reNum > 214748364 || (reNum == 214748364 && rema > 7)){
                return 0;
            }

            //负数，需要提前一位判断大小，否则溢出
            if(reNum < -214748364  || (reNum == -214748364 && rema < -8)){
                return 0;
            }

            reNum = reNum * 10 + rema;
        }

        return reNum;
    }
}